package lib

import (
	"fmt"
	"math/rand"
	"strconv"
	"time"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/service/dynamodb"
)

func UpdateItem() {
	rand.Seed(time.Now().UnixNano())
	now := strconv.Itoa(int(time.Now().Unix()))
	count := strconv.Itoa(rand.Intn(9000))
	//从切片中，随机抽一个
	allStatus := []string{"living", "upcoming", "canceled", "ended"}
	status := allStatus[rand.Intn(len(allStatus))]

	_, err := DynamoClient.UpdateItem(&dynamodb.UpdateItemInput{
		//绑定要修改字段名
		ExpressionAttributeNames: map[string]*string{
			"#count":  aws.String("count"),
			"#status": aws.String("status"),
		},
		//绑定value，即要修改成什么
		ExpressionAttributeValues: map[string]*dynamodb.AttributeValue{
			":count": { //这里的冒号，是起的名字，一种习惯而已，不是必须的。把这里的 :count 改成 abc ，也是可以的。下面的表达式就要写成 abc
				N: aws.String(count),
			},
			":schedule_time": {
				N: aws.String(now),
			},
			":status": {
				S: aws.String(status),
			},
		},
		Key: map[string]*dynamodb.AttributeValue{ //通过主键，找到条目后更新
			"channel_id": {
				S: aws.String("gotest12296"),
			},
		},
		TableName: aws.String("live"),
		/**
		更新表达式。注意这里的写法，字段名本来是可以不用绑定的。但正好这里遇到了保留关键字。
		count 和 status 都是DynamoDb的保存关键字，所以需要做绑定
		而字段名schedule_time，不是保留字，可以直接写
		可以只绑定value，不绑定字段名。也就是直接把字段名写在表达式中
		**/
		UpdateExpression: aws.String("SET #count = :count, schedule_time = :schedule_time, #status=:status"),
	})

	if err != nil {
		fmt.Println(err)
	} else {
		fmt.Printf("更新成功, count:%s schedule_time:%s status:%s ", count, now, status)
	}
}
